//整个Scratch总入口文件
import supportedBrowser from '../lib/supported-browser';
import styles from './index.css';

import React from 'react';
import ReactDOM from 'react-dom';
import {compose} from 'redux';

import GUI from '../containers/gui.jsx';
import AppStateHOC from '../lib/app-state-hoc.jsx';//高阶组件
import HashParserHOC from '../lib/hash-parser-hoc.jsx';//高阶组件

//创建整个编辑器的加载点
const appTarget = document.createElement('div');
appTarget.className = styles.app;
document.body.appendChild(appTarget);

function runScratch(session) {
    if (process.env.NODE_ENV === 'production' && typeof window === 'object') {
        window.onbeforeunload = () => true;//在即将离开当前页面(刷新或关闭)时执行 JavaScript
    }

    GUI.setAppElement(appTarget);
    const WrappedGui = compose(AppStateHOC,HashParserHOC)(GUI);
    /**
        _session=：用户的登录信息，在app-state-hoc.jsx中使用即可，不需要继续后传
     */
    ReactDOM.render(<WrappedGui _session={session}  />, appTarget);        
};

//在此判断浏览器是否支持
//实例化虚拟机会导致不受支持的浏览器崩溃，所以必须先判断浏览器是否支持Scratch
if (supportedBrowser()) {
    //获取session
    const {requestSession} = require('../session-api');
    new Promise((resolve, reject) => {
        requestSession(resolve, reject);
    }).then(session => {
        if (typeof session === 'undefined'){ return runScratch({}); }

        return runScratch(session);
    }, err => {
        return runScratch({});
    });

} else {
    alert("抱歉，浏览器不支持。我们建议您使用Chrome内核的浏览器！");
}
